﻿Imports ClasesRestaurante
Public Class FormAdmOfertas

    Private Sub FormAdmOfertas_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Limpiar()
        cargarCboOfertas()
        cargarCboProductos()
    End Sub

    Private Sub FormAdmOfertas_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        Limpiar()
        cargarCboOfertas()
        cargarCboProductos()
    End Sub

    Public Sub Limpiar()

        lblNombre.Text = ""
        txtPrecioOferta.Text = ""
        txtFechaOferta.Text = ""
        picProducto.Image = Nothing

        txtPrecioOferta.ForeColor = Color.Black

        lblPHNombre.Visible = True
        lblPHPrecio.Visible = True
        lblPHFecha.Visible = True

    End Sub

    'Actualiza o carga el combo box
    Private Sub cargarCboOfertas()
        cboOfertas.Items.Clear()
        For i As Integer = 0 To OfertasRestaurante.Keys.Count - 1
            cboOfertas.Items.Add(OfertasRestaurante.Keys(i))
        Next
    End Sub

    Private Sub cargarCboProductos()
        cboProductos.Items.Clear()
        For i As Integer = 0 To ProductosRestaurante.Keys.Count - 1
            cboProductos.Items.Add(ProductosRestaurante.Keys(i))
        Next
    End Sub

    Private Sub TextBox_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPrecioOferta.GotFocus, txtFechaOferta.GotFocus

        Dim textBox = TryCast(sender, TextBox)

        Select Case textBox.Name
            Case "txtPrecioOferta"
                lblPHPrecio.Visible = False
            Case "txtFechaOferta"
                lblPHFecha.Visible = False
        End Select

    End Sub
    Private Sub TextBox_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPrecioOferta.LostFocus, txtFechaOferta.LostFocus

        Dim textBox = TryCast(sender, TextBox)

        Select Case textBox.Name
            Case "txtPrecioOferta"
                If textBox.Text.Length = 0 Then
                    lblPHPrecio.Visible = True
                End If
            Case "txtFechaOferta"
                If textBox.Text.Length = 0 Then
                    lblPHFecha.Visible = True
                End If
        End Select

    End Sub
    Private Sub label_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles lblPHNombre.MouseHover, lblPHPrecio.MouseHover, lblPHFecha.MouseHover

        Dim label = TryCast(sender, Label)

        Select Case label.Name
            Case "lblPrecio"
                lblPHPrecio.Visible = False
            Case "lblPHFecha"
                lblPHFecha.Visible = False
        End Select

    End Sub
    Private Sub cboOfertas_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboOfertas.SelectedValueChanged

        lblInvisible()

        lblNombre.Text = OfertasRestaurante(cboOfertas.Text).NombreOfertas
        txtPrecioOferta.Text = OfertasRestaurante(cboOfertas.Text).PrecioOferta
        txtPrecioOferta.ForeColor = Color.DarkOrchid
        txtFechaOferta.Text = OfertasRestaurante(cboOfertas.Text).FechaVigor
        picProducto.Image = OfertasRestaurante(cboOfertas.Text).ProductoOfertado.ImagenProducto

        cboProductos.SelectedItem = OfertasRestaurante(cboOfertas.Text).ProductoOfertado.NombreProducto

    End Sub

    Private Sub cboProductos_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboProductos.SelectedValueChanged

        lblInvisible()

        If OfertasRestaurante.ContainsKey(cboProductos.Text) Then
            lblNombre.Text = OfertasRestaurante(cboProductos.Text).NombreOfertas
            txtPrecioOferta.Text = OfertasRestaurante(cboProductos.Text).PrecioOferta
            txtPrecioOferta.ForeColor = Color.DarkOrchid
            txtFechaOferta.Text = OfertasRestaurante(cboProductos.Text).FechaVigor
            picProducto.Image = OfertasRestaurante(cboProductos.Text).ProductoOfertado.ImagenProducto
        Else
            lblNombre.Text = ""
            txtPrecioOferta.Text = ProductosRestaurante(cboProductos.Text).PrecioProducto
            txtPrecioOferta.ForeColor = Color.Black
            txtFechaOferta.Text = ""
            picProducto.Image = ProductosRestaurante(cboProductos.Text).ImagenProducto
        End If

    End Sub

    'Esconde los lebels de los text box
    Private Sub lblInvisible()

        lblPHNombre.Visible = False
        lblPHPrecio.Visible = False
        lblPHFecha.Visible = False

    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click

        'Si no se ha elegido un producto...
        If cboProductos.SelectedItem Is Nothing Then
            MessageBox.Show("Tiene que seleccionar un producto para poder ofertarlo.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        If comprobaciones() = False Then
            Exit Sub
        End If

        'Introducir nueva oferta
        If OfertasRestaurante.ContainsKey(lblNombre.Text) Then
            MessageBox.Show("Esa oferta ya existe", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        OfertasRestaurante.Add(cboProductos.Text & " - " & txtFechaOferta.Text, New Oferta(cboProductos.Text & " - " & txtFechaOferta.Text, Decimal.Parse(txtPrecioOferta.Text), Date.Parse(txtFechaOferta.Text), ProductosRestaurante(cboProductos.Text)))

        Limpiar()
        cargarCboOfertas()

    End Sub

    Private Sub btnModificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnModificar.Click
        'Si no se a elegido una mesa...
        If lblNombre.Text = "" Then
            MessageBox.Show("Tiene que seleccionar la oferta a modificar.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        If comprobaciones() = False Then
            Exit Sub
        End If

        If Decimal.Parse(txtPrecioOferta.Text) > OfertasRestaurante(lblNombre.Text).PrecioOferta Then
            MessageBox.Show("Una oferta no puede tener un precio superior al precio de venta normal", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtPrecioOferta.Focus()
            Exit Sub
        End If

        OfertasRestaurante.Remove(lblNombre.Text)
        OfertasRestaurante.Add(lblNombre.Text, New Oferta(lblNombre.Text, Decimal.Parse(txtPrecioOferta.Text), Date.Parse(txtFechaOferta.Text), ProductosRestaurante(cboProductos.Text)))
        Limpiar()
        cargarCboOfertas()

    End Sub

    Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click
        'Si no se ha elegido una mesa...
        If lblNombre.Text = "" Then
            MessageBox.Show("Tiene que seleccionar la oferta a modificar.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        OfertasRestaurante.Remove(lblNombre.Text)
        Limpiar()
        cargarCboOfertas()

    End Sub

    'Función que comprueba si hay datos sin rellenar
    Private Function comprobaciones() As Boolean

        If txtPrecioOferta.Text = "" AndAlso IsNumeric(txtPrecioOferta.Text) Then
            MessageBox.Show("Falta por introducir el precio de la oferta", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtPrecioOferta.Focus()
            Return False
        End If

        If Decimal.Parse(txtPrecioOferta.Text) > ProductosRestaurante(cboProductos.Text).PrecioProducto Then
            MessageBox.Show("Una oferta no puede tener un precio superior al precio de venta normal", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtPrecioOferta.Focus()
            Return False
        End If

        If txtFechaOferta.Text = "" AndAlso IsDate(txtFechaOferta.Text) Then
            MessageBox.Show("Falta por introducir la fecha de la oferta", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtFechaOferta.Focus()
            Return False
        End If

        If Date.Parse(txtFechaOferta.Text) < Date.Today Then
            MessageBox.Show("La fecha introducida ya se ha pasado.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtFechaOferta.Focus()
            Return False
        End If

        Return True
    End Function

End Class